# 定义列表
# 定义列表使用[],其中的每个数值可以是不同的类型
l1 = ['张三',18,'男']
# 列表也可以使用list来定义
l2 = list(['张三',18,'男'])

# 查看列表类型
print(type(l1)) # <class 'list'>
print(type(l2)) # <class 'list'>

# 列给的基本操作
l3 = [1,2,3,4,5,6,7,8,9,10,'aa','bb']
# 索引取值
print(l3[0])    # 1
print(l3[1])    # 2
print(l3[-1])   # bb
print(l3[-2])   # aa

# 切片操作
print(l3[0:5])
print(l3[5:])
print(l3[:5])
print(l3[::2])
print(l3[::-1]) # 反序切片

# 通过索引修改指定位置的值
l3[0] = '张三'
print(l3)   # ['张三', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'aa', 'bb']

# 列表的增删查改
# 添加元素
l4 = [11,22,33,44,55,66]
# append()：在列表的末尾添加一个元素
l4.append(77)
print(l4)   # [11, 22, 33, 44, 55, 66, 77]
# insert()：在指定位置插入一个元素
l4.insert(1, 88)
print(l4)   # [11, 88, 22, 33, 44, 55, 66, 77]
# extend()：在列表末尾一次性添加多个元素
l4.extend([99, 100])
print(l4)   # [11, 88, 22, 33, 44, 55, 66, 77, 99, 100]

# 删除元素
arr = [11,22,33,44,55,66,77,55,88]
# remove(): 删除列表中指定的元素,只删除第一个匹配的元素
arr.remove(55)
print(arr)
# pop(): 删除列表末尾的元素，并返回该元素
print(arr.pop())
# pop()方法如果指定索引位置，则删除指定位置的元素
print(arr.pop(1))
print(arr)
# del：删除列表中指定的元素
del arr[3]
print(arr)

# 修改元素
arr = [11,22,33,44,55,66,77,55,88]
arr[2] = 333
print(arr)

# 查找数据
arr = [11,22,33,44,55,66,77,55,88]
# index()：查找指定元素的索引位置,如果没有找到，则返回ValueError异常
try:
    print(arr.index(555))
except ValueError:
    print("没有找到")

# count(): 统计列表中某个元素出现的次数
cnt = arr.count(55)
print(cnt)  # 2
cnt2 = arr.count(999)
print(cnt2) # 0,如果统计的元素不存在不会报错，返回0

# 其它操作
arr = [11,4,302,44,55,66,77,55,88]
# 排序操作,如果不指定reverse=True则升序排序，如果加上了则降序排序
arr.sort(reverse=True)
print(arr)

# 列表反转
arr.reverse()
print(arr)
# 列表的连接 + 运算符
arr1 = [11,22,33]
arr2 = [44,55,66]
arr3 = arr1 + arr2
print(arr3)

